package templatePattern;

/**
 * @author LIBOFEI
 * @ClassName DrinkBeverage
 * @description 所有饮料的超累，此类负责
 * @date 2020/6/26 14:30
 * @Version 1.0
 **/
public abstract class DrinkBeverage {

    final void prepareRecipe(){
        boilWater();
        brew();
        if(wantAdd()){
            add();
        }
        pourInCup();
    }

    public void boilWater(){
        System.out.println("烧水");
    }

    //拿什么东西抽出来，让子类实现
    public abstract void brew();

    //加材料，让子类实现
    public abstract void add();


    public void pourInCup(){
        System.out.println("倒进杯子");
    }

    /**
     * 由具体的子类决定要不要覆盖，默认需要加材料
     * @author LIBOFEI
     * @date 15:16 2020/6/26
     * @return boolean
     * @Version  1.0
     **/
    public boolean wantAdd(){
        return true;
    }
}
